home *** CD-ROM | disk | FTP | other *** search
/ 130 MIDI Tool Box / 130 MIDI Tool Box.iso / mpu401c / shopat.c < prev   
C/C++ Source or Header  |  1986-11-02  |  4KB  |  203 lines

  1. /* Copyright (C) 1986 by M. J. Shannon, Jr.
  2. ** Permission to distribute for non-commercial uses granted as long as this
  3. ** notice is retained.  Violators will be prosecuted.
  4. */
  5.  
  6. #include    <stdio.h>
  7. #include    <dos.h>
  8. #include    <fcntl.h>
  9.  
  10. void dump_op(int, char *);
  11.  
  12. char patch_buf[0x66];
  13. char ftp[6];
  14. char disp[5][24];
  15. char *head0[13] =
  16. {
  17.     "Alg",
  18.     "FBL",
  19.     "LFW",
  20.     "LFS",
  21.     "LFD",
  22.     "PMD",
  23.     "AMD",
  24.     "SYNC",
  25.     "PMS",
  26.     "AMS",
  27.     "AME",
  28.     "EGS",
  29.     "KV"
  30. };
  31. char *head1[11] =
  32. {
  33.     "OFR",
  34.     "DET",
  35.     "AR",
  36.     "D1R",
  37.     "D1L",
  38.     "D2R",
  39.     "RR",
  40.     "OL",
  41.     "KSR",
  42.     "KSL",
  43.     "TRAN"
  44. };
  45. char *head2[12] =
  46. {
  47.     "POLY",
  48.     "PBR",
  49.     "PMO",
  50.     "PMT",
  51.     "[FV]",
  52.     "FSW",
  53.     "PWR",
  54.     "AWR",
  55.     "BPR",
  56.     "BAR",
  57.     "BPB",
  58.     "BEB"
  59. };
  60.  
  61. main(argc, argv, envp)
  62. int argc;
  63. char **argv;
  64. char **envp;
  65. {
  66.     FILE *fp;
  67.     char *pb = &patch_buf[0];
  68.     int fh;
  69.     long ft;
  70.     int i, j;
  71.  
  72.     setbuf(stdout, NULL);
  73.     setbuf(stderr, NULL);
  74.     if (argc < 2)
  75.     {
  76.         fprintf(stderr, "Need an argument.\n");
  77.         exit(1);
  78.     }
  79.     fh = open(argv[1], O_RDONLY|O_RAW);
  80.     if (fh == -1)
  81.     {
  82.         fprintf(stderr, "Can't open <%s>.\n", argv[1]);
  83.         exit(1);
  84.     }
  85.     ft = getft(fh);
  86.     fp = fdopen(fh, "rb");
  87.     if (!fp)
  88.     {
  89.         fprintf(stderr, "Can't fdopen <%s>.\n", argv[1]);
  90.         exit(1);
  91.     }
  92.     fread(patch_buf, sizeof patch_buf, 1, fp);
  93.     fclose(fp);
  94.     printf("Header: %.2x %.2x %.2x %.2x %.2x %.2x %.2x\n",
  95.         pb[0] & 0xFF, pb[1] & 0xFF, pb[2], pb[3], pb[4], pb[5], pb[6]);
  96.     printf("DATA NAME:\t%10.10s\n", &pb[84]);
  97.     ftunpk(ft, &ftp[0]);
  98.     printf("DATE:\t\t%2d/%2d/%2d\n", ftp[0] + 80, ftp[1], ftp[2]);
  99.     printf("\n");
  100.     for (i = 0; i < 5; ++i)
  101.         for (j = 0; j < 24; ++j)
  102.             disp[i][j] = -1;
  103.     dump_op(1, &pb[46]);
  104.     dump_op(2, &pb[20]);
  105.     dump_op(3, &pb[33]);
  106.     dump_op(4, &pb[ 7]);
  107.     disp[2][0] = pb[59];            /* ALG */
  108.     disp[2][1] = pb[60];            /* FBL */
  109.     disp[2][2] = pb[66];            /* LW */
  110.     disp[2][3] = pb[61];            /* LFS */
  111.     disp[2][4] = pb[62];            /* LFD */
  112.     disp[2][5] = pb[63];            /* PMD */
  113.     disp[2][6] = pb[64];            /* AMD */
  114.     disp[2][7] = pb[65];            /* SYNC */
  115.     disp[2][8] = pb[67];            /* PMS */
  116.     disp[2][9] = pb[68];            /* AMS */
  117.     disp[2][23] = pb[69];            /* XPOSE */
  118.     disp[4][0] = pb[70];            /* POLY */
  119.     disp[4][1] = pb[71];            /* PBR */
  120.     disp[4][2] = pb[72];            /* PMO */
  121.     disp[4][3] = pb[73];            /* PMT */
  122.     disp[4][4] = pb[74];            /* [FV] */
  123.     disp[4][5] = pb[75] | (pb[76] << 1);    /* FSW */
  124.     disp[4][6] = pb[77];            /* [CS] */
  125.     disp[4][6] = pb[78];            /* PWR */
  126.     disp[4][7] = pb[79];            /* AWR */
  127.     disp[4][8] = pb[80];            /* BPR */
  128.     disp[4][9] = pb[81];            /* BAR */
  129.     disp[4][10] = pb[82];            /* BPB */
  130.     disp[4][11] = pb[83];            /* BEB */
  131.     printf("    ");
  132.     for (i = 0; i < 13; ++i)
  133.         printf(" %4.4s", head0[i]);
  134.     printf("\n");
  135.     for (i = 0; i < 4; ++i)
  136.     {
  137.         printf("OP%d:", i + 1);
  138.         for (j = 0; j < 13; ++j)
  139.         {
  140.             if (disp[i][j] == -1)
  141.                 printf("     ");
  142.             else
  143.                 printf(" %.4d", disp[i][j]);
  144.         }
  145.         printf("\n");
  146.     }
  147.     printf("\n");
  148.     printf("    ");
  149.     for (i = 0; i < 11; ++i)
  150.         printf(" %4.4s", head1[i]);
  151.     printf("\n");
  152.     for (i = 0; i < 4; ++i)
  153.     {
  154.         printf("OP%d:", i + 1);
  155.         for (j = 13; j < 24; ++j)
  156.         {
  157.             if (disp[i][j] == -1)
  158.                 printf("     ");
  159.             else
  160.                 printf(" %.4d", disp[i][j]);
  161.         }
  162.         printf("\n");
  163.     }
  164.     printf("\n");
  165.     printf("    ");
  166.     for (i = 0; i < 12; ++i)
  167.         printf(" %4.4s", head2[i]);
  168.     printf("\n");
  169.     printf("    ");
  170.     for (j = 0; j < 12; ++j)
  171.     {
  172.         if (disp[4][j] == -1)
  173.             printf("     ");
  174.         else
  175.             printf(" %.4d", disp[4][j]);
  176.     }
  177.     printf("\n");
  178.     fflush(stdout);
  179.     fflush(stderr);
  180.     return (0);
  181. }
  182.  
  183. void
  184. dump_op(op, pb)
  185. int op;
  186. char *pb;
  187. {
  188.     --op;
  189.     disp[op][10] = pb[8];    /* AME */
  190.     disp[op][11] = pb[7];    /* EGB */
  191.     disp[op][12] = pb[9];    /* KV */
  192.     disp[op][13] = pb[11];    /* FR */
  193.     disp[op][14] = pb[12];    /* DET */
  194.     disp[op][15] = pb[0];    /* AR */
  195.     disp[op][16] = pb[1];    /* D1R */
  196.     disp[op][17] = pb[4];    /* D1L */
  197.     disp[op][18] = pb[2];    /* D2R */
  198.     disp[op][19] = pb[3];    /* RR */
  199.     disp[op][20] = pb[10];    /* OL */
  200.     disp[op][21] = pb[6];    /* KSR */
  201.     disp[op][22] = pb[5];    /* KSL */
  202. }
  203.